﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Subgurim.Controles;
using System.IO;

namespace PresentacionWeb.control
{
    public partial class FileUpload : System.Web.UI.UserControl
    {

        #region Propiedades

        /// <summary>
        /// Obtiene o establece el nombre de la ultima imagen subida
        /// </summary>
        public string UltimaImagenSubida
        {
            get
            {
                return ViewState["UltimaImagenSubida"].ToString();
            }
            set
            {
                ViewState["UltimaImagenSubida"] = value;
            }
        }


        #endregion

        #region Eventos de la Pagina


        protected void Page_Load(object sender, EventArgs e)
        {
            if (FileUploaderAJAX1.IsPosting)
            {
                this.managePost();
            }

            #region Propiedades del file uploader

            FileUploaderAJAX1.text_Add = "Añadir imagen";
            FileUploaderAJAX1.text_Delete = "Eliminar imagen";
            FileUploaderAJAX1.text_Uploading = "Subiendo imagen...";

            #endregion

        }

        #endregion


        #region Metodos privados

        /// <summary>
        /// Funcion asociada al FileUploadAjax
        /// </summary>
        private void managePost()
        {
            try
            {
                HttpPostedFileAJAX pf = FileUploaderAJAX1.PostedFile;

                if (pf.Type == HttpPostedFileAJAX.fileType.image && pf.ContentLength <= 5 * 1024)
                {
                    FileUploaderAJAX1.SaveAs("~/temp", pf.FileName);

                }
                UltimaImagenSubida = pf.FileName.ToString();
            }
            catch (Exception ex) 
            {
                throw new Exception(ex.ToString());
            }

        }

        #region Metodos para la imagen

        /// <summary>
        /// Convierte una imagen a un array de bytes
        /// </summary>
        /// <returns>Cadena con </returns>
        public String ImagenAString()
        {
            string cade = String.Empty;
            try
            {
                //Convertimos la imagen en un array de bytes
                string directorio = "C:/Documents and Settings/Administrador/Mis documentos/Visual Studio 2008/Projects/Integra/PresentacionWeb/temp/" + UltimaImagenSubida.ToString();

                FileStream fs = new FileStream(directorio, FileMode.OpenOrCreate, FileAccess.Read);
                Byte[] img = new Byte[fs.Length];
                fs.Read(img, 0, Convert.ToInt32(fs.Length));
                cade = this.getString(img);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            return cade;

        }

        /// <summary>
        /// Funcion que obtiene la ultima imagen insertada.
        /// </summary>
        /// <returns></returns>
        public byte[] ObtenerImagen() 
        {
            try
            {
                byte[] imagen=null;

                FileStream FilStr = new FileStream(UltimaImagenSubida, FileMode.OpenOrCreate);
                BinaryReader BinRed = new BinaryReader(FilStr);
                imagen = BinRed.ReadBytes((int)BinRed.BaseStream.Length);

                return imagen;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        /// <summary>
        /// Funcion que obtiene de un vector de byte un string
        /// </summary>
        /// <param name="text">Vector de bytes que contiene los datos de la imagen</param>
        /// <returns>Cadena de texto con los valores del vector</returns>
        private String getString(byte[] text)
        {
            System.Text.ASCIIEncoding codificador = new System.Text.ASCIIEncoding();
            return codificador.GetString(text);
        }

        #endregion

        #endregion
    }
}